#pragma once
#include<iostream>
#include <string>
#include <cstdio>
#include"Log.hpp"
#include"Common.hpp"
 #include <signal.h>
 #include <fcntl.h>
 #include <unistd.h>
 using namespace LogModule;
 const std::string dev="/dev/null";
 void Daemon(int nochdir,int noclose)
 {
    //1.忽视IO，子进程退出的信号
    signal(SIGPIPE,SIG_IGN);
    signal(SIGCHLD,SIG_IGN);
    //2.结束父进程
    if(fork()>0)
    exit(0);
    //3.只有子进程，孤儿进程，父进程退出
    setsid();
    //修改当前进程工作路径
    if(nochdir==0)
    chdir("/");
    if(noclose==0)
    {
        int fd=::open(dev.c_str(),O_RDWR);
        if(fd<0)
        {
            LOG(LogLevel::FATAL)<<"open"<<dev<<"errno";
            exit(OPEN_ERR);
        }
        else{
           dup2(fd,0);
           dup2(fd,1);
           dup2(fd,2);
           close(fd);
        }
    }
 }